package api

/*
#include <stdlib.h>
*/
import "C"
import (
	"strconv"
	"unsafe"

	sc "golang.org/x/text/encoding/simplifiedchinese"
)

func clear(str *C.char) {
	C.free(unsafe.Pointer(str))
}

func cStr2Ptr(str *C.char) uintptr {
	up := unsafe.Pointer(str)
	return uintptr(up)
}
func 中文DLL名(name string) string {
	gbstr, _ := sc.GB18030.NewEncoder().String(name)
	return gbstr
}

func goString2CString(str string) *C.char {
	gbstr, _ := sc.GB18030.NewEncoder().String(str)
	return C.CString(gbstr)
}

// func cStr2Ptr(s string) uintptr {
// 	return uintptr(unsafe.Pointer(goString2CString(s)))
// }

func int642Str(val int64) string {
	str := strconv.FormatInt(val, 10)
	return str
}
func int2Str(val int) string {
	return strconv.Itoa(val)
}

// func EscapeEmoji(text string) string {
// 	data := []byte(text)
// 	ret := []byte{}
// 	skip := 0
// 	for i := range data {
// 		if skip > 1 {
// 			skip -= 1
// 			continue
// 		}
// 		if data[i] == byte(240) && data[i+1] == byte(159) {
// 			code := hex.EncodeToString(data[i : i+4])
// 			ret = append(ret, []byte(fmt.Sprintf("[emoji=%s]", code))...)
// 			skip = 4
// 		} else {
// 			ret = append(ret, data[i])
// 		}
// 	}
// 	return string(ret)
// }
func ptr2str(ptr uintptr) string {
	up := unsafe.Pointer(ptr)
	return goString((*C.char)(up))
}
func goString(str *C.char) string {
	utf8str, _ := sc.GB18030.NewDecoder().String(C.GoString(str))
	return utf8str
}
func ptr2bool(ptr uintptr) bool {
	i := int(ptr)
	return i == 1
}

// func byte2ptr(b []byte) uintptr {
// 	//return uintptr(*((*int64)(unsafe.Pointer(&b))))
// 	return uintptr(unsafe.Pointer(&b))
// }

func bool2ptr(b bool) uintptr {
	if b {
		return uintptr(1)
	}
	return uintptr(0)
}
func ptr2int(ptr uintptr) int {
	return int(ptr)
}
